/* @flow */

import { toArray } from '../util/index'

export function initUse (Vue: GlobalAPI) {
  Vue.use = function (plugin: Function | Object) {
    // 初始化Vue._installedPlugins = [] 赋值给installedPlugins，
    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
    // 防止重复调用，如果存在了就return Vue
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }

    // additional parameters
    const args = toArray(arguments, 1) // 排除第一参数，拿到之后的参数
    // 添加this,也就是Vue作为参数
    args.unshift(this)
    // 存在 install属性的函数就执行，否则直接执行plugin方法；
    if (typeof plugin.install === 'function') {
      plugin.install.apply(plugin, args)
    } else if (typeof plugin === 'function') {
      plugin.apply(null, args)
    }
    // 缓存起来，防止重复调用Vue.use方法；
    installedPlugins.push(plugin)
    return this
  }
}
